/*******************************************************
> Copyright (C) 2024 ==IOT== All rights reserved.
> File Name: inherit.cpp
> Author: IOT
> Website:www.slq.org
> Created Time: 2024年10月24日 星期四 10时40分12秒
***************************************************/

#include <iostream>
using namespace std;

/*
1. 派生类无法继承基类的构造函数。
2， 构造函数的作用是初始类内的成员变量。
3. 派生类继承了基类的成员变量(无法直接访问基类的私有成员变量)

*/

class Person {
	public:
		Person()
		{
			cout << "调用person构造函数" << endl;
		}
};

class Student {
	public:
	Student()
	{
		cout << "调用student构造函数" << endl;
	}
	Student(int age)
	{
		
	}
	~Student()
	{
		cout << "调用student析构" << endl;
	}
};
// 定义基类
class Base {
	// 编译器提供默认构造
	protected:
	int n;
	public:
		Base (int n)
		{
			cout << "调用基类构造" << endl;
			this->n = n;
		}
		~Base()
		{
			cout << "调用基类析构" << endl;
		}
};
// 定义派生类
class Derived : public Base {
	// Base xxx;
	Student stu; // Student类对象充当了派生类的成员变量
	Person per;  // 成员对象
	int m;		 // 成员变量
	
	public:
	Derived(int m, int n) : Base(n), per(), stu() // 派生类构造函数需要对基类成员初始化时，需要通过初始化列表主动调用基类构造
	{
		cout << "调用派生类构造" << endl;
		this->m = m;
	}
	~Derived()
	{
		cout << "调用派生类析构" << endl;
	}
	void show()
	{
		cout << "m = " << m << ", n = " << n << endl;
	}
};

int main()
{
	Derived d(10, 20);
	d.show();
	
	return 0;
}

